/* Trigger para verificar que las cantidades del inventario sean las correctas de no ser asi se inserta un eventoo OJO a lo mejor deberia ir en el procedimiento!! xD
*/

CREATE OR REPLACE TRIGGER validarcantidamedclinica AFTER INSERT OR UPDATE OF CANTIDAD ON INVENTARIOMEDCLINICA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
cantMin NUMBER;
nombMedicina varchar2(150);
descripcion_evento varchar2(150);
BEGIN
cantMin := cantidadminimamedclinica(:NEW.IDMEDICINA);
select m.nombrecomercial into nombMedicina from medicina m where m.id = :NEW.IDMEDICINA;

	DBMS_OUTPUT.PUT_LINE('Cantidad Min: ' || cantMin ||', De: ' ||nombMedicina);
	DBMS_OUTPUT.PUT_LINE('NEW CANTIDAD: ' || :NEW.CANTIDAD ||', De: ' ||nombMedicina);
	IF :NEW.CANTIDAD < cantMin THEN
		descripcion_evento := 'La nueva cantidad de '|| nombMedicina || ' es menor a la cantidad minima establecida debe abastecer el inventario';
		DBMS_OUTPUT.PUT_LINE(descripcion_evento);
		insert into eventoclinica values (ideventoclinica.nextval,'N',sysdate,null,null,descripcion_evento,1,:NEW.RIFCLINICA) ;
	END IF;
	insert into consumomedicinaclinica values(1,'J-3495003',1000,sysdate)	
END; insert into consumomedicinaclinica values(1,'J-3495003',1000,to_date(sysdate,'dd/mm/yyyy'))
----------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER cantconsumomedmayorexist BEFORE INSERT ON CONSUMOMEDICINACLINICA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
cantidadActualMed NUMBER(20);
nombMedicina varchar2(150);

BEGIN
	SELECT m.nombrecomercial INTO nombMedicina FROM medicina m WHERE m.id = :NEW.IDMEDICINA;
	SELECT I.CANTIDAD INTO cantidadActualMed FROM INVENTARIOMEDCLINICA I WHERE I.RIFCLINICA = :NEW.RIFCLINICA AND I.IDMEDICINA = :NEW.IDMEDICINA;

	DBMS_OUTPUT.PUT_LINE('Cantidad Actual: ' || cantidadActualMed ||', De: ' ||nombMedicina);
	DBMS_OUTPUT.PUT_LINE('Cantidad del consumo: ' || :NEW.cantidad ||', De: ' ||nombMedicina);

	IF (:NEW.CANTIDAD > cantidadActualMed) THEN
		--DBMS_OUTPUT.PUT_LINE('La cantidad usada no puede exceder la existente, intente de nuevo.' );
		raise_application_error(-20601, 'La cantidad usada no puede exceder la existente, intente de nuevo.');
	END IF;
END;
----------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER cantconsumomedmayorexist BEFORE INSERT ON CONSUMOMEDICINACLINICA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
cantidadActualMed NUMBER(20);
nombMedicina varchar2(150);
prueba EXCEPTION;

BEGIN
	SELECT m.nombrecomercial INTO nombMedicina FROM medicina m WHERE m.id = :NEW.IDMEDICINA;
	SELECT SUM(I.CANTIDAD) INTO cantidadActualMed FROM INVENTARIOMEDCLINICA I WHERE I.RIFCLINICA = :NEW.RIFCLINICA AND I.IDMEDICINA = :NEW.IDMEDICINA AND I.FECHAEGRESO IS NULL;

	DBMS_OUTPUT.PUT_LINE('Cantidad Actual: ' || cantidadActualMed ||', De: ' ||nombMedicina);
	DBMS_OUTPUT.PUT_LINE('Cantidad del consumo: ' || :NEW.cantidad ||', De: ' ||nombMedicina);

	IF (:NEW.CANTIDAD > cantidadActualMed) THEN RAISE prueba;
	END IF;
		--DBMS_OUTPUT.PUT_LINE('La cantidad usada no puede exceder la existente, intente de nuevo.' );
EXCEPTION when prueba then raise_application_error(-20601, 'La cantidad usada no puede exceder la existente, intente de nuevo.');
	
END;--ESTE ES EL ACTUAL!!
----------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER validarcantminequipoclinica BEFORE INSERT ON INVENTARIOEQUIPOCLINICA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
cantMin NUMBER;
nombEquipo varchar2(150);
errorsillo EXCEPTION;
BEGIN
	select e.cantidadminima into cantMin from equipomedico e where e.id = :NEW.IDEQUIPO;
	select e.nombre into nombEquipo from equipomedico e where e.id = :NEW.IDEQUIPO;

	DBMS_OUTPUT.PUT_LINE('Cantidad Min: ' || cantMin ||', De: ' ||nombEquipo);
	DBMS_OUTPUT.PUT_LINE('NEW CANTIDAD: ' || :NEW.CANTIDAD ||', De: ' ||nombEquipo);
	DBMS_OUTPUT.PUT_LINE('TRIGGER Cantidad Min EQUIPO: ' );
	IF :NEW.CANTIDAD < cantMin THEN RAISE errorsillo;		
	END IF;
	EXCEPTION when errorsillo then raise_application_error(-20601,'La nueva cantidad de '|| nombEquipo || ' es menor a la cantidad minima establecida debe abastecer el inventario');		
END;